﻿using System;
using System.Security.Cryptography;
using System.Text;

namespace ToyStore.Domain.Common
{
    /// <summary>
    /// Helper do tworzenia hasha MD5.
    /// </summary>
	public static class Md5Helper
	{
        /// <summary>
        /// Pobranie MD5 z podanego stringa.
        /// </summary>
        /// <param name="md5Hash"></param>
        /// <param name="input"></param>
        /// <returns></returns>
		public static string GetMd5Hash(MD5 md5Hash, string input)
		{
            if (md5Hash == null) throw new ArgumentNullException("md5Hash");
           
			// Convert the input string to a byte array and compute the hash.
			byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input));

			// Create a new Stringbuilder to collect the bytes
			// and create a string.
			var sBuilder = new StringBuilder();

			// Loop through each byte of the hashed data 
			// and format each one as a hexadecimal string.
			for (int i = 0; i < data.Length; i++)
			{
				sBuilder.Append(data[i].ToString("x2"));
			}

			// Return the hexadecimal string.
			return sBuilder.ToString();
		}

        /// <summary>
        /// Porównanie wartosci hasha ze stringiem.
        /// </summary>
        /// <param name="md5Hash"></param>
        /// <param name="input"></param>
        /// <param name="hash"></param>
        /// <returns></returns>
		public static bool VerifyMd5Hash(MD5 md5Hash, string input, string hash)
		{
			// Hash the input.
			string hashOfInput = GetMd5Hash(md5Hash, input);

			// Create a StringComparer an compare the hashes.
			StringComparer comparer = StringComparer.OrdinalIgnoreCase;

			if (0 == comparer.Compare(hashOfInput, hash))
			{
				return true;
			}
			return false;
		}
	}
}
